The present invention relates generally to the field of resource sharing in a multiprocessing system and more particularly to the fair sharing and utilization of multi-dimensional resources among multiple users in a multiprocessing system.
Multiprocessing systems (e.g., servers and datacenters) often execute a spectrum of jobs concurrently and share the resources (e.g., CPUs, CPU time, memory, special GPU processors, disk space, software licenses, etc.) of the system among the executing jobs. The resources a job requires to execute without constraint varies over time and among the types of resources that it utilizes. Since resources in a multiprocessor system are finite, approaches that share resources fairly among jobs that compete for them have been developed. Some issues addressed in a sharing scheme include the notion of fairness (i.e., how it is defined), the types of resources managed in the sharing, and the way the definition of fairness is implemented. A resource is usually allocated by a scheduler to jobs of a consumer according to a share ratio configured for this consumer. For example, a scheduler allocates a number of CPU cores out of a total number of CPU cores to jobs that are submitted by a user group according to a share ratio configured for this user group among other user groups.
As jobs are submitted from resource consumers that are often organized in hierarchies such as groups and sub-groups, or projects and sub-projects, often a hierarchical model is applied to scheduling jobs in a system in which the resources allocated to a parent consumer are available first to its child consumers, then to other consumers if there are still resources left. An approach based on such a model is often called a hierarchical fairshare model.